package com.forest.datachangetracker.annotation;

import com.forest.datachangetracker.enums.OperationType;

import java.lang.annotation.*;

/**
 * 数据审计注解
 * @author forest
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DataAudit {
    /**
     * 操作类型
     * @return
     */
    OperationType operationType();

    /**
     * 目标实体类
     * @return
     */
    Class<?> targetEntity();

    /**
     * 实体ID的SPEL表达式，用于从参数中获取ID（适用于UPDATE/DELETE）
     * @return
     */
    String targetId() default "";

    /**
     * 结果ID的SPEL表达式，用于从返回值中获取ID（适用于CREATE）
     * @return
     */
    String resultId() default "";

    /**
     * 是否追踪多个实体
     * @return
     */
    boolean multipleEntities() default false;

    /**
     * 实体列表的SPEL表达式（用于多个实体）
     * @return
     */
    String entitiesExpression() default "";

    /**
     * 自定义业务描述
     * @return
     */
    String description() default "";

    /**
     * 批量操作ID
     * @return
     */
    String batchId() default "";

    /**
     * 是否忽略空值变更
     * @return
     */
    boolean ignoreNullChanges() default true;

    /**
     * 是否启用旧实体查询（仅对UPDATE有效）
     * @return
     */
    boolean enableOldEntityQuery() default true;

    /**
     * 业务唯一标识（用于关联业务）
     * @return
     */
    String businessKey() default "";

    /**
     * 是否异步执行
     * @return
     */
    boolean async() default true;
}
